import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;

/**
 * 5. 砝码称重
 * https://www.lanqiao.cn/problems/1447/learning/?page=1&first_category_id=1&second_category_id=3&tag_relation=intersection&tags=%E7%9C%81%E8%B5%9B,2021
 */
public class Main5 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n = scan.nextInt();
        // 使用动态规划 dp[i][j] 二阶dp
        int count = 0;
        int[] arr = new int[n + 1];
        long sum = 0; // 表示最大的称重的 重量
        for(int i = 1;i <= n;i++) {
            arr[i] = scan.nextInt();
            sum += arr[i];
        }
        // dp[i][j] 判断当前 i及其之前的砝码，是否可以称出 j 这个重量，如果可以则为true，反之为false
        // 比如arr 为 1 4 6
        // dp[2][3] => 也就是 i从1-2之间的 arr值(也就是1和4)，是否可以称重出 3 这个重量
        boolean[][] dp = new boolean[101][100001];
        // 初始化为 false
        for(int i = 1;i <= n;i++) {
            for(int j = 1;j <= sum;j++) {
                // 判断情况
                // 当 这个 j 这个重量 和 arr[i] 相等的话
                if(j == arr[i]) {
                    dp[i][j] = true;
                }else {
                    // 如果不等的话
                    // 继续判断情况：
                    // 1、当dp[i - 1][j] 的值为 true的话，说明前面存在可以称重 的情况，直接赋值为true
                    // 2、当dp[i - 1][Math.abs(j - arr[i])] 的值为true的话，那么说明前面存在可以称重的值，那么再加上当前的 arr[i] 即可称重j值
                    // 3、当dp[i - 1][j + arr[i]] 的值为true的话，表示上一次称砝码能配出这个重量
                    dp[i][j] = dp[i - 1][j] || dp[i - 1][Math.abs(j - arr[i])] || dp[i - 1][j + arr[i]];
                }
            }
        }
        // 返回
        // 判断这个 dp[n][1~sum] 为true 即为可以称出重量，那么个数+1
        for(int j = 1;j <= sum;j++) {
            if(dp[n][j] == true) {
                count++;
            }
        }
        System.out.println(count);
        scan.close();
    }

    public static void main1(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n = scan.nextInt();
        int[] arr = new int[n];
        for(int i = 0;i < n;i++) {
            arr[i] = scan.nextInt();
        }
        // 存放的是 可以称重的砝码值，那么set的长度即为可以称出的不同的重量个数
        // 这个 Set 可以达到一个去重的目的
        HashSet<Integer> set = new HashSet<>();
        // 将0初始化到 set 中，进行计算第一个值
        set.add(0);
        for(int i = 0;i < n;i++) {
            // 将set 中的数据转换成 一个链表
            List<Integer> list = new ArrayList<>(set);
            // 遍历 链表 将这个链表中的每一个值 和 当前的 arr[i] 进行 相加和相减，相减需要取绝对值，不能存在负值
            for(int x : list) {
                // 将相加和相减的结果进行放入到 set 中达到一个去重的作用，并且重新获得的set 就是作为下一个 链表
                set.add(x + arr[i]);
                set.add(Math.abs(x - arr[i]));
            }
        }
        System.out.println(set.size() - 1); // 减1 是为了将开始存放的 0 去除
        scan.close();
    }
}
